class Solution {//leetcode174——地下城游戏
public:
    int calculateMinimumHP(vector<vector<int>>& dungeon) {
        //创建DP表
        int m=dungeon.size();
        int n=dungeon[0].size();
        vector<vector<int>> dp(m+1,vector<int>(n+1,INT_MAX));
        dp[m-1][n]=1;
        dp[m][n-1]=1;
        //状态表示为，在I,J位置时，最小的健康值
        //状态转移方程为，dp[i][j]=min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]
        //要注意dp[i][j]会出现小于0的情况，此时最小健康值应该改为1
        for(int i=m-1;i>=0;i--){
            for(int j=n-1;j>=0;j--){
                dp[i][j]=min(dp[i+1][j],dp[i][j+1])-dungeon[i][j];
                if(dp[i][j]<=0) dp[i][j]=1;
            }
        }
        return dp[0][0];

    }
};